#include "registerdialog.h"
#include "ui_registerdialog.h"
#include "global.h"
#include "httpmgr.h"

RegisterDialog::RegisterDialog(QWidget *parent)
    : QDialog(parent)
    , ui(new Ui::RegisterDialog)
{
    ui->setupUi(this);
    // 设置成密码模式
    ui->pass_edit->setEchoMode(QLineEdit::Password);
    ui->confirm_edit->setEchoMode(QLineEdit::Password);
    // 添加样式设置
    ui->err_tip->setProperty("state", "normal");
    repolish(ui->err_tip);
    // 连接通知
    connect(HttpMgr::GetInstance().get(), &HttpMgr::sig_http_finish,
            this, &RegisterDialog::slot_reg_mod_finish
            );

    initHttpHandlers();
}

RegisterDialog::~RegisterDialog()
{
    delete ui;
}

void RegisterDialog::on_get_code_clicked()
{
    // 验证邮箱的地址正则表达式
    auto email = ui->email_edit->text();
    // 邮箱地址的正则表达式
    QRegularExpression regex(R"((\w+)(\.|_)?(\w*)@(\w+)(\.(\w+))+))");
    bool match = regex.match(email).hasMatch(); // 执行正则表达式匹配
    if(match){
        // 发送http请求验证码
    }else{
        // 提示邮箱不正确
        showTip(tr("邮箱地址不正确"), false);
    }
}

void RegisterDialog::slot_reg_mod_finish(ReqId id, QString res, ErrorCodes err)
{
    if(err != ErrorCodes::SUCCESS){
        showTip(tr("网络请求错误"),false);
        return;
    }

    // 解析 JSON 字符串,res需转化为QByteArray(序列化)
    QJsonDocument jsonDoc = QJsonDocument::fromJson(res.toUtf8());

    //json解析错误：为空
    if(jsonDoc.isNull()){
        showTip(tr("json解析错误"),false);
        return;
    }

    //json解析错误：不是json对象
    if(!jsonDoc.isObject()){
        showTip(tr("json解析错误"),false);
        return;
    }

    // json对象
    // QJsonObject jsonObj = jsonDoc.object();
    _handlers[id](jsonDoc.object());

    //调用对应的逻辑
    return;
}

void RegisterDialog::showTip(QString str, bool b_ok){

    if(b_ok){
        ui->err_tip->setProperty("state", "normal");
    }else{
        ui->err_tip->setProperty("state", "err"); // 设置字体颜色
    }
    ui->err_tip->setText(str);  // 设置字符串
    repolish(ui->err_tip);
}

void RegisterDialog::initHttpHandlers()
{
    //注册获取验证码回包逻辑
    _handlers.insert(ReqId::ID_GET_VARIFY_CODE, [this](QJsonObject jsonObj){
        int error = jsonObj["error"].toInt();  // 转换为int类型
        /*
        * 语法解析：json格式
        *   "key": "100" 键值对形式
        */

        if(error != ErrorCodes::SUCCESS){
            showTip(tr("参数错误"),false);
            return;
        }
        // 把email取出来
        auto email = jsonObj["email"].toString();
        showTip(tr("验证码已发送到邮箱，注意查收"), true);
        qDebug()<< "email is " << email ;
    });
}

